【CodeDeploy】デプロイグループにオンプレミスインスタンス登録をしてみた。

【CodeDeploy】デプロイグループにオンプレミスインスタンス登録をしてみた。

Clock Icon2022.01.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、以下のドキュメントを基に、オンプレミスインスタンスを CodeDeploy のデプロイグループ配下に登録してみようと思います。

register-on-premises-instance コマンド (IAM ユーザー ARN) を使用してオンプレミスインスタンスを登録する

構成図

EC2 インスタンスをオンプレミスサーバーに見立ててデプロイグループに登録してみようと思います。
パブリックサブネットにインスタンスを配置しているため今回はインターネット経由で API を実行します。

使用する OS について

今回、OS は「Ubuntu Server 20.04 LTS」を使用します。
CodeDeploy エージェントのサポートされる OS バージョンには注意が必要です。

CodeDeploy エージェントでサポートされるオペレーティングシステム

ステップ 1: オンプレミスインスタンスの IAM ユーザーを作成する

オンプレミスインスタンス用に IAM ユーザーを作成します。

作成する IAM ユーザーはマネジメントコンソールへのアクセスは必要ないため、「アクセスキー - プログラムによるアクセス」で作成します。

ステップ 2: IAM ユーザーにアクセス許可を割り当てる

アプリケーションリビジョンが S3 バケットに格納されている場合は、S3 へアクセス権限が必要です。今回は、以下の権限を付与しました。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Action": ["s3:Get*", "s3:List*"],
			"Effect": "Allow",
			"Resource": "*"
		}
	]
}

参考:送信元 IP に基づいて AWS へのアクセスを拒否する

ステップ 1 でアクセスキーを発行しています。アクセスキーが流出すると、該当 S3 バケットへ不正アクセスされます。
そこで、API が実行可能な IP アドレスを制限しました。

AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": ["s3:Get*", "s3:List*"],
			"Resource": "*"
		},
		{
			"Sid": "VisualEditor1",
			"Effect": "Deny",
			"Action": "*",
			"Resource": "*",
			"Condition": {
				"NotIpAddress": {
					"aws:SourceIp": "123.456.789.123/32"
				},
				"Bool": {
					"aws:ViaAWSService": "false"
				}
			}
		}
	]
}

ステップ 3: オンプレミスインスタンスに設定ファイルを追加します。

オンプレミスインスタンスにステップ 1 で用意した認証情報を設定します。
OS ごとに設定ファイルのパスやファイル名が異なります。

今回、「Ubuntu」を使用しているため、/etc/codedeploy-agent/conf/codedeploy.onpremises.ymlで作成していますが、詳細は以下をご参照ください。

ステップ 4: オンプレミスインスタンスに設定ファイルを追加します。

/etc/codedeploy-agent/conf/codedeploy.onpremises.yml
---
aws_access_key_id: アクセスキー
aws_secret_access_key: シークレットアクセスキー
iam_user_arn: ステップ1で作成したIAMユーザー
region: デプロイグループが存在するリージョン

ステップ 4: AWS CLI のインストールと設定

AWS CLI がインストールされていない OS の場合は以下を参照して AWS CLI をインストールします。

Installing or updating the latest version of the AWS CLI

Ubuntu の場合

sudo apt-get install zip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

ステップ 5: AWS_REGION 環境変数を設定します (Ubuntu Server および RHEL のみ)

CodeDeploy エージェントを自動更新するために AWS_REGION 環境変数を CodeDeploy がサポートしているリージョンの識別子に設定します。

export AWS_REGION=デプロイグループが存在するリージョン

ステップ 6: CodeDeploy エージェントのインストール

CodeDeploy エージェントを実際にインストールします。
OS ごとにインストール方法が違いますのでリファレンスを参照ください。

ステップ 7: CodeDeploy エージェントのインストール

私の場合は、ステップ 5 で環境変数を設定していたため環境変数を参照するように変更しました。

sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
wget https://aws-codedeploy-${AWS_REGION}.s3.${AWS_REGION}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile
sudo service codedeploy-agent status

ステータスが「running」になっていれば、OK です。

オンプレミスインスタンス側の設定は以上です。

ステップ 7: オンプレミスインスタンスを登録

ここからは、AWS 側からの設定です。

CloudShell または、CodeDeploy を設定可能な権限が付与された端末でオンプレミスインスタンスの紐付けを行います。
インスタンス名は、一意であることが推奨されています。

aws deploy register-on-premises-instance --instance-name インスタンスの名前(今回はOnPremiseInstanceで設定) --iam-user-arn arn:aws:iam::アカウントID:user/ステップ1のユーザー名

マネジメントコンソール上に登録されたインスタンスが表示されていれば完了です。

まとめ

今回は CodeDeploy エージェントを使用してデプロイグループへオンプレミスインスタンスを登録してみました。

OS のバージョンや IAM ユーザーの制約など条件はありますが画期的な機能だと思います。

この記事が参考になれば幸いです。以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.